package com.example.chamberlainserver.Service;

import com.example.chamberlainserver.Entry.MaterialBorrowRecord;
import com.example.chamberlainserver.Vo.Request.Material.MaterialBorrowDTO;
import com.example.chamberlainserver.Vo.Request.Material.MaterialBorrowQuery;
import com.example.chamberlainserver.dto.PageResult;

/**
 * 物资外借记录服务接口
 */
public interface MaterialBorrowRecordService {
    
    /**
     * 添加物资外借记录
     * @param borrowDTO 物资外借记录DTO
     * @return 添加后的物资外借记录
     */
    MaterialBorrowRecord addBorrowRecord(MaterialBorrowDTO borrowDTO);
    
    /**
     * 更新物资外借记录
     * @param borrowDTO 物资外借记录DTO
     * @return 更新后的物资外借记录
     */
    MaterialBorrowRecord updateBorrowRecord(MaterialBorrowDTO borrowDTO);
    
    /**
     * 删除物资外借记录
     * @param id 记录ID
     * @return 是否删除成功
     */
    boolean deleteBorrowRecord(Long id);
    
    /**
     * 根据ID查询物资外借记录
     * @param id 记录ID
     * @return 物资外借记录
     */
    MaterialBorrowRecord getBorrowRecordById(Long id);
    
    /**
     * 分页查询物资外借记录
     * @param query 查询条件
     * @return 分页结果
     */
    PageResult<MaterialBorrowRecord> pageBorrowRecords(MaterialBorrowQuery query);
    
    /**
     * 归还物资
     * @param id 记录ID
     * @param isIntact 是否完好
     * @param remark 备注
     * @return 更新后的物资外借记录
     */
    MaterialBorrowRecord returnMaterial(Long id, Boolean isIntact, String remark);
}